#!/usr/bin/python
#
#  Create an array of C strings with Duktape built-in strings.
#  Useful when using external strings.
#

import os
import sys
import json

def to_c_string(x):
	res = '"'
	term = False
	for i, c in enumerate(x):
		if term:
			term = False
			res += '" "'

		o = ord(c)
		if o < 0x20 or o > 0x7e or c in '\'"\\':
			# Terminate C string so that escape doesn't become
			# ambiguous
			res += '\\x%02x' % o
			term = True
		else:
			res += c
	res += '"'
	return res

def main():
	f = open(sys.argv[1], 'rb')
	d = f.read()
	f.close()
	meta = json.loads(d)

	print('const char *duk_builtin_strings[] = {')

	strlist = meta['builtin_strings_base64']
	for i in xrange(len(strlist)):
		s = strlist[i]
		if i == len(strlist) - 1:
			print('    %s' % to_c_string(s.decode('base64')))
		else:
			print('    %s,' % to_c_string(s.decode('base64')))

	print('};')

if __name__ == '__main__':
	main()
